23

» WarCraft 3 / Разработка

Похожие вопросы:

ответ
~8gabriel8:
Каждый вопрос заслуживает отдельного обсуждения, а на все стало лень ответ печатать, когда начал.
Печатать реально долго, легче было реализовать примеры в карте:
Кроме последнего пункта, его нужно персонально рассматривать, так как игра не подразумевает использование для юнита двух списков. Например, можно наполнить список построек у юнита всеми зданиями, часть из которых блокировать при открытии одного списка и разблокировать при открытии второго, но это подходит, когда один рабочий. Можно сделать второй список из книги заклинаний, куда добавлены способности на основе игрушечных строений, чтобы было видно карту пути и всё такое, но там для них используется один приказ, то есть всегда одинаковое здание будет при нажатии на любую способность, а ещё нет стоимости золота и дерева, что тоже придётся как-то ваять триггерно. Можно перевоплощать юнита при смене списка в другого, но там тоже сложности, не помню точно какие, вроде бы связаны с расой, так как все строят по-разному.

С точкой сбора всё просто. Способность у игрока не заблокировать, потому нужно забрать её у всех зданий, которые есть на карте, либо будут построены.

Группа из максимум 9 юнитов работает немножко коряво, ранее мы с PT153 находили какой-то вариант, чтобы работало быстро, но лень пользоваться поиском. Вроде каждую 0.01 секунду проверялось количество выбранных юнитов, лишние удалялись из выбора.

Чтобы не было очереди, пришёл в голову лишь вариант с апгрейдом здания. Но у меня реализован просто пример для одного конкретного здания, а для нескольких абстрактных зданий нужно делать текстовым триггером, который будет для каждого здания запускать локальный таймер на нужное время и добавлять анимационный текстаг work. По отмене апгрейда, либо истечению таймера анимационный тег удаляется и создаётся воин, к которому привязывается соответствующий звук. Но есть и другие варианты, типа создавать внутри здания другое, которое реально будет производить юнитов, когда заказал апгрейд, там иная реализация. И не упомянул про затрачиваемые ресурсы. Потребуется забирать/возвращать часть ресурсов при отмене апгрейда.

На примере триггеров и фиолетовых строк в редакторе объектов смотри, как сделано улучшение Бугая в Дренорского бугая.

Конечно, мог бы сделать MUI триггер на GUI для отсутствия очереди, но это было бы громоздко и в техническом смысле уродливо. производящие здания заносились бы в массив, для которого будет массив таймеров, которые будут заноситься в виде событий на истечение таймера в другой триггер, а точнее будет несколько массивов таймеров, по максимальному числу тренируемых юнитов в любом производящем здании.

Нашёл твои вопросы:
В них бы и спрашивал, что непонятно. А то тебе отвечают, а ты игнорируешь, словно очень умный.
Тебе даже вариант без триггеров для четвёртого пункта сделали: xgm.guru/p/wc3/230191/comments?postid=426457#comment5
ответ
Hush, я проверил, работает
Поменял там баф на любой случайный и карта стала запускаться
ответ
~8gabriel8:
Только нанимать тех же актёров озвучки. У случае с другими людьми или голосовыми движками в лучшем случае удастся сделать что-то похожее, но всё равно будет понятно, что это имитация. Конкретики в вопросе мало, но подобную задачу решал новым голосом с длительным и подробным описанием для актёра его персонажа, чтобы он выдал приемлемую интонацию.

23

» WarCraft 3 / Группа - юниты игрока вызывает утечку

Похожие вопросы:

ответ
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode

23

» WarCraft 3 / Ошибка при начале игры

Похожие вопросы:

ответ
~8gabriel8:
UrsaBoss:
Всё из за настройки "Качество текстур"
А что делать, я не совсем понял)
Наверное, какая-то текстура имеет размеры не кратные степени двойки.
ответ
Не сов сем по теме, но близко - вот такое можно реализовать на новых функциях 1.31
Увы, полноценного инвентаря на аналогичных функциях пока не выкладывали в общий доступ, каждый пилит себе свою версию.

23

» WarCraft 3 / Как сменить тип атаки

Похожие вопросы:

ответ
Можно через улучшения сделать безвозвратно или через способность "Темный". В остальных случаях только морф.
ответ
Эх, друг) ну я реализовал так. Есть в способностях замечательный закл перевоплащение иллидана. В нейтрально - враждебных. То есть ты создаешь двух героев у одного рэнжа 600 у другова 100 например, а этот спел меняет твоих героев местами(каждому там уже свои спец эффекты делаешь). Там есть еще у меха спел есть похожий, там без ограничения по времени, ну думаю идею ты понял.
ответ
На 126 патче на мемхаке вот можно покупать модификаторы типа атаки, алгоритм для оружия будет тот же самый
На 131 патче функции смены типа атаки есть, но не работают (пока что =))
Морф не костыль, если делаете кампанию и там атаку может менять глав герой, тогда надо будет сделать Х (7) копий героя с новым типом атаки, а если у вас 100 героев и надо всем менять тогда раздувать до 700, это ужасно
Wurst позволит динамически заполнить базу таких героев, но это сложно
ответ
Яд, и всё работает.
ответ
Fly123, это на стандарте на гуи есть
Вот тут примеры как оно делается

23

» WarCraft 3 / Урон в астрал

Похожие вопросы:

ответ
делается изи тебе в константах нужно сделать 0 и давать спел с маг резистом
ответ
izelorr, бонусный урон от астрала пишется в константах карты. Его можно изменить. По умолчанию множитель равен x1.66.

Мои тесты показали, что 100 урона по юниту в астрале без доп. бонусов наносит верные 166. По герою 124.5, что тоже верно - урон умножается на (1 - процент сопротивления магии), а затем на бонус астрала. 100 * (1 - 0.25) * 1.66 = 124.5.

23

» WarCraft 3 / Duel

Похожие вопросы:

ответ
~8gabriel8:
В этом действии Отряд - Pick every unit in (Random 1 units from (Units in Game Area <gen> owned by Player_Hero[Random_Duel])) and do (Actions) где задаётся Random_Duel? Оно как было при инициализации задано, так и не меняется. То есть сначала выбираешь в общей области сражений юнита игрока и перемещаешь его в дуэльную область, а через 2 секунды опять пытаешься выбрать в общей области сражений юнита этого игрока, которого уже там нет, он в дуэльной. Это только то, что бросилось в глаза в самом триггере, в игре не проверял.

23

» WarCraft 3 / Рандомный Герой

Похожие вопросы:

ответ
и перед этим всем действом надо вставить set bj_wantDestroyGroup = true чтоб группа не утекала
ответ
Потому что при стандартном получении опыта вмешиваются игровые константы и формулы по которым они работают, либо своя система это тогда смотри 3 вопрос от бота, либо настраивай игровые константы как тебе надо, это все описано в базовой статье по редактору, раздел формулы WE.
ответ
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode

23

» WarCraft 3 / неуязвимость здания

Похожие вопросы:

ответ
Я припоминаю как сталкивался с таким. Скорее всего это не лечится. Можно попробовать создавать даммика на месте здания и заставлять его использовать заклинание. Или даже полностью самому написать спелл - он довольно прост.
ответ
Не берите вы эти ульты для основы своих скиллов, они сделаны через одно место лиж бы работали в капмании, а там дальше хоть потоп.
Сделайте заклинание из канала, а юнитов вокруг делайте неуязвимыми.
ответ
да. Сделать не зданием
здание + неуязвимость = убирает полосу
ответ
Кажись придумал. Берем способность "трансмутация" выставляем коэффициент золота и дерева нуль, и ставим в целях героев, не героев, здания, неуязвимые и уязвимые. Но остается открытым вопрос, как запретить целить нейтральные здания, потому что сейчас их целить можно.
И это решилось. Просто убираем галочку "нейтральные" в целях. Таким образом, полный список целей выглядит так: воздушные, враги, герои, здания, наземные, не герои, неуязвимые, уязвимые.

23

» WarCraft 3 / Переменная - способность

Похожие вопросы:

ответ
zlowar:
То есть дебаф должен всегда обновляться.)
Зачем ты делаешь триггерный дебафф? В дефолте так устроено, что дебафф заменяется, так вешай же дефолтно
ответ
Ошибка в описании абилки, точнее неправильные формулы для slk полей <DataA1> лучше вводите значение напрямую, чтобы не делать ошибок.
ответ
То что сказали выше.
Только когда сидишь в гуях это не очевидно, и кажется что используются сами абилки типа "Верховный маг - Буран", а на самом деле это просто строка "blizzard".
Сконвертни триггер в текст и там где отдача приказа будет не айди абилки, а ее строковый приказ.
Так что если хранить приказ, используй строковую переменную. Или целочисленную, тк каждому строковому приказу соответствует целочисленный индекс.
constant native OrderId takes string orderIdString returns integer
constant native OrderId2String takes integer orderId returns string
Есть еще приказы для которых нет соответствующей строки, они отдаются только через число (например перемещение предмета по слотам), эти уже надо искать. Где-то таблица есть с числовыми приказами.
ответ
Комментарии оставляй на местах, где не закончил.

23

» WarCraft 3 / Не показывается юнит

Похожие вопросы:

ответ
ну попробуй так
перед созданием сбрось флаг
set a=GetUnitUIDefByIdCaching(unitid)
if a>0 then
call WMem(a+0xB8,0)
endif
после создания единицу обратно пишешь, должно сработать
ответ
Naadir, что значит сохраняется но не компилится?
можно скрины кода а также пути к карте, игре и редактору
ответ
WakVellios, По всему проблема в том, что каждый юнит содержит slk таблицу присваивающему max min dmg для юнитов, а строки max min не предусмотрены в РО, с остальными полями всё работает.
Решается созданием кастомной slk таблицей новых юнитов.
ответ
Подробнее нужно?

23

» WarCraft 3 / Скажите как убрать утечки?

Похожие вопросы:

ответ
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode

23

» WarCraft 3 / Поле зрения юнита

Похожие вопросы:

ответ
А теперь заходим в константы и правим пункт: Монстры: время возвращения охраны, Монстры: расстояние охраны.
ответ
world_editor:
Паладин стоит на месте если синий вражеский пехотинец рядом и атакует его при нажатие на нём пкм 1 раз. (надеюсь правильно понял вопрос)
Да, это помогло. Юнит перестаёт атаковать, но начинает бежать от атакующего врага. Пришлось ещё триггер сделать и в итоге вот что получилось
 PaladinAttacked
     События
         Боевая единица - Паладин 0000 <gen> Получает урон
     Условия
     Действия
         Боевая единица - Order (Паладин 0000 <gen>) to Отставить
 Trigger
     События
         Map initialization
     Условия
     Действия
         Боевая единица - Add classification of Работник или аналог to Паладин 0000 <gen>
ответ
Хм, а как насчет сначала найти кодом, есть ли вокруг цели, а потом давать абилку с приказом?

23

» WarCraft 3 / Поясните за утечки

Похожие вопросы:

ответ
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).

23

» WarCraft 3 / Создание/помощь в Триггере

Похожие вопросы:

ответ
Создай новый триггер
событие- Боевая единица входит в нужную область (A Units enters MYREGION)
условие - Боевая единица - Мой Герой (Unittype или Unit Comparison /+ Player comparison)
действие - Победа (Игра-Victory)
Предварительно создай область MYREGION
ответ
Измени скорость игры и удлини игровой день, насколько я помню он тоже ускоряется при изменении скорости, хотя я могу ошибаться - лучше проверить
ответ
уйма времени уходит на то чтобы понять, что как работает
Де-факто нужно понимание принципов работы только в отношении тех или иных алгоритмов, внутреннее устройство игры может иметь значение в ну очень редких случаях.
ответ
система урона и переменная типа... забыл какого типа, но она может принимать значения true\false
с её помощью отслеживаем включение\выключения щита
ответ
Name Legion:
мне кажется я чтото упустил....либо так..попробовать...
либо так
если integer A то он подберет из массива области увидит кто играет и создаст в эти области работников..либо присвоить по player number...не знаю
они и так рабочие
надо тестировать
Integer A всетаки буду использовать...по солиднее выглядит он..спасибо вопрос закрыт.

23

» WarCraft 3 / Изгнание в астрал

Похожие вопросы:

ответ
делается изи тебе в константах нужно сделать 0 и давать спел с маг резистом

23

» WarCraft 3 / Что делать, и как вылечить Редактор Карт?

Похожие вопросы:

ответ
koloff, единственно верный вариант - перетащить весь импорт из карт в кампанию. Да, трудозатратно. Да, итоговый вес доставляет. Увы.
Представь длину списка файлов в импорте кампании под конец работы
Поэтому придется думать, что загружать, а что нет. По своему опыту знаю, что вычищать потом неиспользованные данные из импорта - сущий ад. Особенно если к каждой модели по 3-4 текстуры.
И да, музыка в mp3 формате тоже не дает грузится. Онли вав.
Все грузится.

23

» WarCraft 3 / Сброс кулдауна

Похожие вопросы:

ответ
Gerhop, если у игрока лишь 1 герой то можно сразу дать этот скилл
при подборе предмета разрешать его а при выпадении запрещать
тогда вроде кд будет сохранятся
если мне память не изменяет
ответ
Например, так.

23

» WarCraft 3 / Не заменяются текстуры склонов

Похожие вопросы:

ответ
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
ответ
Решение: перерисовать клиф, обновить в формат blp. залить в карту.
ответ
В файле war3x.mpq есть несколько маленьких mpq для каждого тайлсета. Конкретно текстуры Короны лежат в i.mpq

23

» WarCraft 3 / Манипуляции с предметом

Похожие вопросы:

ответ
Решил проблему так: создал предметный скилл на основе "повышения здоровья" (т.к. у него нет иконки), обнулил значения бонуса и добавил сфере.
ответ
Уже была у меня такая проблема все делаеш также но ставиш значение в минус: xgm.guru/p/100/178018
ответ
если хотите ссылку вот xgm.guru/p/wc3/unliminv?postid=291866
а может не тот не помню век прошел =)

23

» WarCraft 3 / Дебаф промахов.

Похожие вопросы:

ответ
Поскольку его не пугает наличие большого влияния промахов на геймплей - скорее всего он делает рпг. Имхо в рпг всегда клево смотрятся тексттаги полученного урона, для создания которых необходимы триггеры на отлов получения урона. А отлавливаемый урон - можно и прохилить.
Для прохила(и вообще всех манипуляций с задержкой в 0.00 сек) лично я юзаю такие костыли:
Либа здесь только для доп табуляции. Я за чистый жасс + дефайны.
library ZeroTimeEvent

    globals
        constant integer ZTEArraySize = 64//Even 32 is alot, 64 is too much! Exactly what I need!
        timer Zero//Used for 0. sec uses
        integer ZTECurrent = 0
        unit array ZTEUnits[ZTEArraySize]
        integer array ZTEIntegers[ZTEArraySize]
        real array ZTEReals[ZTEArraySize]
        trigger array ZTETriggers[ZTEArraySize]
    endglobals
    
    function ZeroTimeEvent takes nothing returns nothing
            loop
                set  ZTECurrent = ZTECurrent - 1
                call TriggerExecute( ZTETriggers[ZTECurrent] )
                exitwhen ZTECurrent < 1
            endloop
    endfunction
    
    #define ZTEAddUnit(u) = {
        set  ZTEUnits[ZTECurrent] = u
    }
    
    #define ZTEAddInteger(i) = {
        set  ZTEIntegers[ZTECurrent] = i
    }
    
    #define ZTEAddReal(r) = {
        set  ZTEReals[ZTECurrent] = r
    }
    
    #define ConfirmZTE(trig) = {
        set  ZTETriggers[ZTECurrent] = trig
        set  ZTECurrent = ZTECurrent + 1
        call TimerStart( Zero, ZeroTime, false, function ZeroTimeEvent )
    }
    
    
    
endlibrary
Пример использования
#define UnitRemoveForceAttack(u) = {
    call UnitAddAbility( u, 'Abun' )
    call UnitRemoveAbility( u, 'Abun' )
         ZTEAddUnit(u)
         ConfirmZTE(CheckIfUnitHasA002)
}
Минус такой системы в необходимости создавать триггер для каждого блока кода, т.к. массивы блоков кода запрещены

23

» WarCraft 3 / Способность Техника

Похожие вопросы:

ответ
Кароче. Объясняю в чём дело.
Способность "Техника" имеет прикреплённые к ней спецэффекты шипов через одноимённое заклинание (тоже "Техника").
Почему шипы видны только на "больших героях"? - потому что у них есть особые точки крепления аттачей, маунт-справа/слева (на подобии нога-левая, рука-правая).
Как убрать? - логика подсказывает что нужно зачистить соответствующие поля в эффекте "Техника", что собственно и верно... и нет...
Дело в том что скилл "Техника" относится к тем, которые имеют ошибку с изменением графических параметров в РО. (меняешь, а оно всё равно по старому отображается - например тёмная стая, стадо ящерец).
Что же делать? - берёшь стандартную технику, смотришь её стандартный эффект. Удаляешь из стандартного эффекта всю графику (теперь техника не будет давать шипы). Копируешь стандартную технику - вот твой новый скилл который уже не будет давать шипов. Готово. Работаешь с новой копией.
ответ
Походу дело было в баганой модели спецэффекта, которая и вызывала просадку фпс.
ответ
Ну не совсем так, но в общем верно. Т.к основа спелла уже не меняется если он выучен, но изучения спелл меняется полностью...
ответ
~8gabriel8:
Вот есть вариант: xgm.guru/p/wc3/222019?postid=413030#comment28
ответ
Проблема решена, была ошибка в самом улучшении. Извиняюсь! Техника улучшает пассивки.

23

» WarCraft 3 / Заставить ИИ выбрать юнита

Похожие вопросы:

ответ
Параметры стака ядов с одним и тем же баффом, это нужно чтобы складывались замедлени и\или урон от разных юнитов, или бафф тупо обновлялся.
С одним из параметров яды с разными баффами скатаются независимо, каждый вешает свой бафф. (годная основа для замедляющих способностей)
А игра вылетает из за зацикливания, темболее бафф при удалении и появлении наносит 0.00 ед урона, это так для справки.
ответ
Триггерно создаешь юнита, Каждую секунду, в течении 6 сек, заставляешь всех вражеских юнитов вокруг в радиусе 500 атаковать его.
ответ
~8gabriel8:
Попробовал на карте дать приказ пехотинцам и стрелкам Отряд - ... Щелчок правой кнопкой мыши ... Они пошли с соблюдением боевого порядка, сначала пехотинцы, потом стрелки.

23

» WarCraft 3 / Отлов урона

Похожие вопросы:

ответ
ОП, спелы все триггерные?

Если да, то заводишь глобальную переменную bool IsSpell = false, перед нанесением урона в коде даёшь ей true, после - обратно false. В триггере, который срабатывает на получение урона, первым действием ставишь локалку булёвую, которая ==IsSpell. Вуаля, ты отслеживаешь весь урон с абилок, а что не урон с абилок, то есть урон с руки.

Сам так всегда делал, никогда не понимал пляски с бубнами и прочими орбами. Оно, конечно, проще идеологически, но по факту намного геморройнее: добавлять орб, проверять орб, удалять орб, подменять реальный орб триггерно...

Кстати, можно по такой же схеме через логические переменные указывать тип урона, например, чистый, физический (почему бы и не давать с абилок физический урон?) или магический, от этого вообще что угодно можно пилить, хоть кучу видов брони, хоть цветовые индикаторы разного типа урона.
ответ
Кастовать способности даммиком и отлавливать урон от него.
ответ
был в старом коде, есть и в новом коде, ищи по сайту "мемхак"
ответ
~8gabriel8:
Ещё можешь наносить вместо отравления иной бафф, а отравлять даммиком. По этому баффу сможешь различать урон от автоатаки и способности.
ответ
Вот типы урона "Огня преисподней":
if BlzGetEventAttackType( ) == ConvertAttackType( 0 ) and BlzGetEventDamageType( ) == ConvertDamageType( 8 ) and BlzGetEventWeaponType( ) == ConvertWeaponType( 0 ) then
Bergi_Bear, ну там же всё интуитивно понятно:
BlzGetEventAttackType( ) - возвращает тип атаки.
BlzSetEventAttackType( ) - меняет тип атаки.

23

» WarCraft 3 / Респаун Крипов

Похожие вопросы:

ответ
Вот обновленная версия на структурах, я её вроде выкладывал...
либо используйте CreateCreepOfType для создания крипов, так будет респаунить тока тех крипов которых вы создали этой функцией...
ответ
Сергей45, дело в том, что когда ты ставишь юнита на карте, то при сохранении в скрипт карты добавляется кусок, который на старте игры именно в этих координатах создаст именно этого юнита, с указанным количеством здоровья, маны, уровнем, и предметами (если есть инвентарь).
Для тебя это просто "нажал, поставил, в игре он есть".
На деле же - он создаётся отдельным куском скрипта (и это нормально).
Когда ты открываешь на юните (в редакторе) вкладку с выпадающими предметами, то там можно указать выпадающие предметы и их шанс при этом. Что происходит на самом деле? - в скрипт игры вшивается кусок, который регистрирует событие смерти этого юнита (а так же событие получения над ним контроля, если его захватят то предмет тоже выпадает). Умирая этот юнит пройдёт несколько простых проверок, и дальше под ним будут созданы предметы (из списка).
Список формируется в момент смерти юнита!
Когда юнит умирает, берётся глобальный список (общий), и в нём производится очистка. После этого в него добавляются предметы и числа (т.е. шанс). После этого особая хитрая функция выбрасывает случайное число и получает по нему один из предметов (записанных ранее в список).
Готово. Именно такова суть работы базового дропа предметов.
Дальше тебе надо используя событие смерти юнита, сделать проверку на его тип, и создать нужный предмет под ним (но это будет работать в 100% случаев). Если ты хочешь добавить к этому шанс, то можно просто дополнительно прикрутить выбрасывание случайного числа (например от 1 до 100), и если оно меньше некоего другого числа (например 40), то только тогда создаёшь предмет (это будет 40%-й шанс на дроп).
А вот если тебе надо сделать хитрее, например 100% что предмет выпадет, и из них 20% что это будет кольцо на +3, и остальные 80% что это будет кольцо на +2, тогда тебе придётся добавить ещё несколько проверок, и их число будет рости от количества этих вариантов дропа.
Если ты делаешь всё на 1.26 и у тебя есть JNGP, то ты можешь сразу использовать добавленные в GUI функции для работы со списком:
call RandomDistReset() очистка списка
call RandomDistAddItem(ID,X) добавление предмета ID с шансом X (число от 0 до 100)
set itemID = RandomDistChoose() получение случайного ID из списка, за счёт шанса
Первые два - на самом дне списка действий категории "Предмет"
Третий - указывается вместо типа предмета, при его создании (тоже есть в списке)
Если у тебя нет возможность использовать JNGP (например из-за версии патча), тогда ты можешь просто на прямую обращаться к этим функциям (если, конечно, они не изменились). Но для этого тебе придётся чуть-чуть обрести понимания в том как работает JassCS).